{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Hello, World!\n",
    "\n",
    "This notebook is about your first steps with knowledge graph embedding models in PyKEEN.\n",
    "\n",
    "You'll get to do the following:\n",
    "\n",
    "1. train a model\n",
    "2. evaluate how good it learned\n",
    "3. turn it around and start making predictions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import getpass\n",
    "import os\n",
    "import sys\n",
    "import time\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import pykeen\n",
    "import torch\n",
    "from pykeen.pipeline import pipeline\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.8.3 (default, May 27 2020, 20:54:22) \n",
      "[Clang 11.0.3 (clang-1103.0.32.59)]\n"
     ]
    }
   ],
   "source": [
    "print(sys.version)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Thu Jul  2 16:08:55 2020\n"
     ]
    }
   ],
   "source": [
    "print(time.asctime())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cthoyt\n"
     ]
    }
   ],
   "source": [
    "print(getpass.getuser())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.0.1-dev-023c10bb\n"
     ]
    }
   ],
   "source": [
    "print(pykeen.get_version(with_git_hash=True))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train a Model\n",
    "\n",
    "More tutorials on training your first model can be found [here](https://pykeen.readthedocs.io/en/latest/first_steps.html).\n",
    "\n",
    "You can try switching out the model, add a `loss`, a `regularizer`, or switch the training assumption from `sLCWA` to `LCWA`. Each also has their own hyper-parameters, though PyKEEN tries to have reasonable defaults for you. The most useful one to change is the `num_epochs` in the `training_kwargs`, which is already below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9d8b9a3c6cf941bbb1ad994f10867196",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training epochs on cpu', style=ProgressStyle(description_…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:pykeen.training.training_loop:using stopper: <pykeen.stoppers.stopper.NopStopper object at 0x1487e36d0>\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Training batches on cpu', max=7.0, style=ProgressStyle(de…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:pykeen.evaluation.evaluator:Starting batch_size search for evaluation now...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:pykeen.evaluation.evaluator:Concluded batch_size search with batch_size=201.\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "514afb99120b47a0afc6dd961bd71e13",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Evaluating on cpu', max=201.0, style=ProgressStyle(descri…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:pykeen.evaluation.evaluator:Evaluation took 0.04s seconds\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "result = pipeline(\n",
    "    dataset='Nations',\n",
    "    model='RotatE',\n",
    "    random_seed=1235,\n",
    "    device='cpu',\n",
    "    training_kwargs=dict(num_epochs=100),  # Shouldn't take more than a minute or two on a nice computer\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Save the trained model (which contains the triples and all of the learned parameters), the results from training, and all of the experimental metadata."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['results.json', 'metadata.json', 'trained_model.pkl']"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "save_location = 'nations_transe'  # relative to here\n",
    "result.save_to_directory(save_location)\n",
    "os.listdir(save_location)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RotatE(\n",
       "  (loss): MarginRankingLoss()\n",
       "  (regularizer): NoRegularizer()\n",
       "  (entity_embeddings): Embedding(14, 400)\n",
       "  (relation_embeddings): Embedding(55, 400)\n",
       ")"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# How to look at the model\n",
    "model = result.model\n",
    "model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "TriplesFactory(path=\"/Users/cthoyt/dev/pykeen/src/pykeen/datasets/nations/train.txt\")"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# How to look at the triples\n",
    "tf = model.triples_factory\n",
    "tf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(14, 55, 1592)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tf.num_entities, tf.num_relations, tf.num_triples"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluating the Results\n",
    "\n",
    "Check that the loss is going down (and not oscillating) by plotting in the notebook."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "result.plot_losses()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Look at the result. These are pretty tricky to interpret, so remember:\n",
    "\n",
    "- adjusted mean rank is between [0, 1]. Closer to 1 is better!\n",
    "- mean rank is a positive integer, with a bound based on the number of entities. Closer to 0 is better!\n",
    "- hits@k is reported between [0, 1] and interpreted as a percentage. Closer to 1 is better!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Type</th>\n",
       "      <th>Metric</th>\n",
       "      <th>Value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>avg</td>\n",
       "      <td>adjusted_mean_rank</td>\n",
       "      <td>0.853866</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>avg</td>\n",
       "      <td>mean_rank</td>\n",
       "      <td>4.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>avg</td>\n",
       "      <td>mean_reciprocal_rank</td>\n",
       "      <td>0.449381</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>avg</td>\n",
       "      <td>hits_at_1</td>\n",
       "      <td>0.248756</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>avg</td>\n",
       "      <td>hits_at_3</td>\n",
       "      <td>0.562189</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>avg</td>\n",
       "      <td>hits_at_5</td>\n",
       "      <td>0.751244</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>avg</td>\n",
       "      <td>hits_at_10</td>\n",
       "      <td>0.960199</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>worst</td>\n",
       "      <td>mean_rank</td>\n",
       "      <td>4.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>worst</td>\n",
       "      <td>mean_reciprocal_rank</td>\n",
       "      <td>0.449381</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>worst</td>\n",
       "      <td>hits_at_1</td>\n",
       "      <td>0.248756</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>worst</td>\n",
       "      <td>hits_at_3</td>\n",
       "      <td>0.562189</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>worst</td>\n",
       "      <td>hits_at_5</td>\n",
       "      <td>0.751244</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>worst</td>\n",
       "      <td>hits_at_10</td>\n",
       "      <td>0.960199</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>best</td>\n",
       "      <td>mean_rank</td>\n",
       "      <td>4.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>best</td>\n",
       "      <td>mean_reciprocal_rank</td>\n",
       "      <td>0.449381</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>best</td>\n",
       "      <td>hits_at_1</td>\n",
       "      <td>0.248756</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>best</td>\n",
       "      <td>hits_at_3</td>\n",
       "      <td>0.562189</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>best</td>\n",
       "      <td>hits_at_5</td>\n",
       "      <td>0.751244</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>best</td>\n",
       "      <td>hits_at_10</td>\n",
       "      <td>0.960199</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     Type                Metric     Value\n",
       "0     avg    adjusted_mean_rank  0.853866\n",
       "1     avg             mean_rank  4.000000\n",
       "2     avg  mean_reciprocal_rank  0.449381\n",
       "3     avg             hits_at_1  0.248756\n",
       "4     avg             hits_at_3  0.562189\n",
       "5     avg             hits_at_5  0.751244\n",
       "6     avg            hits_at_10  0.960199\n",
       "7   worst             mean_rank  4.000000\n",
       "8   worst  mean_reciprocal_rank  0.449381\n",
       "9   worst             hits_at_1  0.248756\n",
       "10  worst             hits_at_3  0.562189\n",
       "11  worst             hits_at_5  0.751244\n",
       "12  worst            hits_at_10  0.960199\n",
       "13   best             mean_rank  4.000000\n",
       "14   best  mean_reciprocal_rank  0.449381\n",
       "15   best             hits_at_1  0.248756\n",
       "16   best             hits_at_3  0.562189\n",
       "17   best             hits_at_5  0.751244\n",
       "18   best            hits_at_10  0.960199"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result.metric_results.to_df()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Turn it around: make predictions\n",
    "\n",
    "It's very difficult to interpret KGEMs statistically, so it's best to sort order the predictions by their scores. All interaction functions in PyKEEN have been implemented such that the higher the score (or less negative the score), the more likely a triple is to be true.\n",
    "\n",
    "Before making any predictions, we're goign to show some word clouds of the entities and relations in the Nations dataset, with size corresponding to frequency of appearance in triples."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div align='center' style='width:100%'><div align='center' style='text-align:justify; border-radius: 25px;background: #fff7f7;overflow: auto; width:500px !important; padding:20px; '; text-align: center; word-wrap: break-word;> <span style='color:#a55571;font-size:2.2999999999999994em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>india&nbsp;</span> <span style='color:#bc72d0;font-size:1.25em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>burma&nbsp;</span> <span style='color:#2ECC71;font-size:1.8499999999999996em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>cuba&nbsp;</span> <span style='color:#008080;font-size:1.9999999999999996em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>israel&nbsp;</span> <span style='color:#2ECC71;font-size:1.8499999999999996em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>china&nbsp;</span> <span style='color:#00b4ff;font-size:3.4999999999999987em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>usa&nbsp;</span> <span style='color:#223AE6;font-size:2.1499999999999995em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>egypt&nbsp;</span> <span style='color:#008080;font-size:1.9999999999999996em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>brazil&nbsp;</span> <span style='color:#6C22E6;font-size:2.4499999999999993em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>ussr&nbsp;</span> <span style='color:#FF5733;font-size:1.6999999999999997em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>indonesia&nbsp;</span> <span style='color:#a55571;font-size:2.2999999999999994em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>poland&nbsp;</span> <span style='color:#B18904;font-size:3.199999999999999em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>uk&nbsp;</span> <span style='color:#6C22E6;font-size:2.4499999999999993em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>netherlands&nbsp;</span> <span style='color:#5F6A6A;font-size:1.4em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>jordan&nbsp;</span></div></div>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tf.entity_word_cloud()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div align='center' style='width:100%'><div align='center' style='text-align:justify; border-radius: 25px;background: #fff7f7;overflow: auto; width:500px !important; padding:20px; '; text-align: center; word-wrap: break-word;> <span style='color:#725394;font-size:0.8em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>militaryactions&nbsp;</span> <span style='color:#FF0080;font-size:0.9500000000000001em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>nonviolentbehavior&nbsp;</span> <span style='color:#DBA901;font-size:2.899999999999999em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>relngo&nbsp;</span> <span style='color:#ACB02E;font-size:0.65em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>warning&nbsp;</span> <span style='color:#bc72d0;font-size:1.6999999999999997em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>unweightedunvote&nbsp;</span> <span style='color:#ACB02E;font-size:0.65em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>attackembassy&nbsp;</span> <span style='color:#FF5733;font-size:1.5499999999999998em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>relexports&nbsp;</span> <span style='color:#2ECC71;font-size:1.8499999999999996em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>treaties&nbsp;</span> <span style='color:#008080;font-size:2.2999999999999994em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>conferences&nbsp;</span> <span style='color:#ACB02E;font-size:0.65em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>aidenemy&nbsp;</span> <span style='color:#ACB02E;font-size:0.65em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>unoffialacts&nbsp;</span> <span style='color:#0489B1;font-size:2.599999999999999em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>reldiplomacy&nbsp;</span> <span style='color:#725394;font-size:0.8em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>duration&nbsp;</span> <span style='color:#ACB02E;font-size:0.65em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>lostterritory&nbsp;</span> <span style='color:#a55571;font-size:1.9999999999999996em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>commonbloc2&nbsp;</span> <span style='color:#008080;font-size:2.2999999999999994em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>ngo&nbsp;</span> <span style='color:#5F6A6A;font-size:1.1em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>pprotests&nbsp;</span> <span style='color:#bc72d0;font-size:1.6999999999999997em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>reltreaties&nbsp;</span> <span style='color:#ACB02E;font-size:0.65em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>severdiplomatic&nbsp;</span> <span style='color:#0489B1;font-size:2.599999999999999em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>ngoorgs3&nbsp;</span> <span style='color:#725394;font-size:0.8em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>emigrants3&nbsp;</span> <span style='color:#DBA901;font-size:2.899999999999999em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>commonbloc1&nbsp;</span> <span style='color:#725394;font-size:0.8em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>violentactions&nbsp;</span> <span style='color:#5882FA;font-size:1.25em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>tourism&nbsp;</span> <span style='color:#FF0080;font-size:0.9500000000000001em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>students&nbsp;</span> <span style='color:#725394;font-size:0.8em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>economicaid&nbsp;</span> <span style='color:#0489B1;font-size:2.599999999999999em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>timesinceally&nbsp;</span> <span style='color:#8000FF;font-size:2.1499999999999995em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>weightedunvote&nbsp;</span> <span style='color:#0489B1;font-size:2.599999999999999em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>intergovorgs&nbsp;</span> <span style='color:#FF0080;font-size:0.9500000000000001em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>exportbooks&nbsp;</span> <span style='color:#ACB02E;font-size:0.65em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>relemigrants&nbsp;</span> <span style='color:#FF0080;font-size:0.9500000000000001em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>releconomicaid&nbsp;</span> <span style='color:#725394;font-size:0.8em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>boycottembargo&nbsp;</span> <span style='color:#a55571;font-size:1.9999999999999996em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>blockpositionindex&nbsp;</span> <span style='color:#ACB02E;font-size:0.65em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>dependent&nbsp;</span> <span style='color:#FF0080;font-size:0.9500000000000001em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>relexportbooks&nbsp;</span> <span style='color:#5F6A6A;font-size:1.1em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>accusation&nbsp;</span> <span style='color:#ACB02E;font-size:0.65em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>expeldiplomats&nbsp;</span> <span style='color:#FF0080;font-size:0.9500000000000001em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>negativecomm&nbsp;</span> <span style='color:#003366;font-size:1.4em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>commonbloc0&nbsp;</span> <span style='color:#5882FA;font-size:1.25em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>relbooktranslations&nbsp;</span> <span style='color:#003366;font-size:1.4em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>booktranslations&nbsp;</span> <span style='color:#223AE6;font-size:3.4999999999999987em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>embassy&nbsp;</span> <span style='color:#5F6A6A;font-size:1.1em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>reltourism&nbsp;</span> <span style='color:#848484;font-size:2.749999999999999em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>intergovorgs3&nbsp;</span> <span style='color:#FF0080;font-size:0.9500000000000001em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>relstudents&nbsp;</span> <span style='color:#CE22E6;font-size:2.4499999999999993em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>independence&nbsp;</span> <span style='color:#FF0080;font-size:0.9500000000000001em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>tourism3&nbsp;</span> <span style='color:#5882FA;font-size:1.25em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>officialvisits&nbsp;</span> <span style='color:#5F6A6A;font-size:1.1em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>militaryalliance&nbsp;</span> <span style='color:#003366;font-size:1.4em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>negativebehavior&nbsp;</span> <span style='color:#5F6A6A;font-size:1.1em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>timesincewar&nbsp;</span> <span style='color:#725394;font-size:0.8em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>eemigrants&nbsp;</span> <span style='color:#848484;font-size:2.749999999999999em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>relintergovorgs&nbsp;</span> <span style='color:#003366;font-size:1.4em;white-space: normal;font-family:verdana;display: inline-block;line-height:30px'>exports3&nbsp;</span></div></div>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tf.relation_word_cloud()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>tail_id</th>\n",
       "      <th>tail_label</th>\n",
       "      <th>score</th>\n",
       "      <th>novel</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>12</td>\n",
       "      <td>usa</td>\n",
       "      <td>-4.734015</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>11</td>\n",
       "      <td>uk</td>\n",
       "      <td>-4.879151</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "      <td>india</td>\n",
       "      <td>-5.088564</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>13</td>\n",
       "      <td>ussr</td>\n",
       "      <td>-5.246472</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>10</td>\n",
       "      <td>poland</td>\n",
       "      <td>-5.404687</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>egypt</td>\n",
       "      <td>-5.418431</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>9</td>\n",
       "      <td>netherlands</td>\n",
       "      <td>-5.454831</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>cuba</td>\n",
       "      <td>-5.576015</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>7</td>\n",
       "      <td>israel</td>\n",
       "      <td>-5.625240</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>brazil</td>\n",
       "      <td>-5.971289</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>china</td>\n",
       "      <td>-6.008514</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>6</td>\n",
       "      <td>indonesia</td>\n",
       "      <td>-6.170503</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>burma</td>\n",
       "      <td>-6.243946</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>8</td>\n",
       "      <td>jordan</td>\n",
       "      <td>-6.272475</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    tail_id   tail_label     score  novel\n",
       "12       12          usa -4.734015   True\n",
       "11       11           uk -4.879151  False\n",
       "5         5        india -5.088564   True\n",
       "13       13         ussr -5.246472   True\n",
       "10       10       poland -5.404687  False\n",
       "4         4        egypt -5.418431  False\n",
       "9         9  netherlands -5.454831  False\n",
       "3         3         cuba -5.576015   True\n",
       "7         7       israel -5.625240  False\n",
       "0         0       brazil -5.971289  False\n",
       "2         2        china -6.008514  False\n",
       "6         6    indonesia -6.170503  False\n",
       "1         1        burma -6.243946  False\n",
       "8         8       jordan -6.272475  False"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Who do we predict brazil has a conference with?\n",
    "model.predict_tails('brazil', 'conferences')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>head_id</th>\n",
       "      <th>head_label</th>\n",
       "      <th>score</th>\n",
       "      <th>novel</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>12</td>\n",
       "      <td>usa</td>\n",
       "      <td>-4.729367</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>11</td>\n",
       "      <td>uk</td>\n",
       "      <td>-4.894013</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "      <td>india</td>\n",
       "      <td>-4.895095</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>13</td>\n",
       "      <td>ussr</td>\n",
       "      <td>-5.108867</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>10</td>\n",
       "      <td>poland</td>\n",
       "      <td>-5.168697</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>9</td>\n",
       "      <td>netherlands</td>\n",
       "      <td>-5.345132</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>cuba</td>\n",
       "      <td>-5.654552</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>egypt</td>\n",
       "      <td>-5.740056</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>china</td>\n",
       "      <td>-5.780384</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>6</td>\n",
       "      <td>indonesia</td>\n",
       "      <td>-5.885899</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>7</td>\n",
       "      <td>israel</td>\n",
       "      <td>-5.966243</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>brazil</td>\n",
       "      <td>-5.971290</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>8</td>\n",
       "      <td>jordan</td>\n",
       "      <td>-6.152668</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>burma</td>\n",
       "      <td>-6.345171</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    head_id   head_label     score  novel\n",
       "12       12          usa -4.729367   True\n",
       "11       11           uk -4.894013  False\n",
       "5         5        india -4.895095   True\n",
       "13       13         ussr -5.108867   True\n",
       "10       10       poland -5.168697   True\n",
       "9         9  netherlands -5.345132  False\n",
       "3         3         cuba -5.654552   True\n",
       "4         4        egypt -5.740056  False\n",
       "2         2        china -5.780384  False\n",
       "6         6    indonesia -5.885899  False\n",
       "7         7       israel -5.966243  False\n",
       "0         0       brazil -5.971290  False\n",
       "8         8       jordan -6.152668  False\n",
       "1         1        burma -6.345171  False"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Who do we predict to have a conference with brazil?\n",
    "model.predict_heads('conferences', 'brazil')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
